Combine是Apple退出的的异步处理框架。
常见的编程范式
- 命令式编程
- 函数式编程
- 特点:函数执行结果仅仅取决于函数参数。相比命令编程,少了许多参数声明
- 面相对象编程
- 声明式编程
- 特点: 以声明的形式表达程序的执行逻辑。常见的有sql、html、swiftui、Combine等
发布者订阅者模式
- publisher 发布者 -> up主
- subscriber 订阅者 -> 粉丝
- subscription 订阅 -> 点击关注
- dispatch center 调度中心 ->视频平台 -> Combine
- emit data 发布数据 -> 发布视频通知订阅者
- operator -> 视频剪辑
Combine编程需要理解思考的问题:
- 什么时间发送数据
- 发送数据类型
- 发送次数
- 可以发送错误数据吗
- 如何中途停止发送
- 有多少种发布者
基本的发布者和订阅者
Publisher:
- Just(value) :
- 发布一次数据, 并立即结束
- Future(closure):
- 初始化发布者,执行异步操作。当操作完成后,向订阅者发布数据。 clousre必须有参数,来告知是否操作成功
- 发送一次就结束
- Subject(协议): 可以调用send方法发送多次
PassthroughSubject
可以发送来自send方法和其他发布者的数据CurrentValueSubject(value)
可以保存和发布最后的数据(自send方法和其他发布者),可设置默认数据
Subscriber
Sink(receivceCompletion:Closure, receiveValue:Closure)
- receivceCompletion:完成数据发送时执行,内容可以是成功或失败
- receiveValue: 数据过来后执行,参数将在回调中进一步加工
Assign(object:Reference, keypath:KeyPath)
- 接收到的数据赋给对象的某个属性
发布者和订阅者的数据类型必须一致,错误类型也需要一致
swift
// 可以看到 `Self.Failure == S.Failure, Self.Output == S.Input` 要求类型一致
public func subscribe<S>(_ subscriber: S) where S : Subscriber, Self.Failure == S.Failure, Self.Output == S.Input
// 可以看到 `Self.Failure == S.Failure, Self.Output == S.Input` 要求类型一致
public func subscribe<S>(_ subscriber: S) where S : Subscriber, Self.Failure == S.Failure, Self.Output == S.Input
- Combine定义了一些扩展来中转发送数据,便于实现类型的一致
代码示例: [Combine之基本的订阅者和发布者代码示例]